package com.fotkidemo;

import android.graphics.Bitmap;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import com.fotkidemo.beans.Image;
import com.fotkidemo.util.BitmapCache;
import com.fotkidemo.util.DiskCache;
import com.fotkidemo.util.ImageDownloader;

import java.util.ArrayList;
import java.util.List;

/**
* Created with IntelliJ IDEA.
* User: roma
* Date: 6/21/12
* Time: 8:29 PM
* To change this template use File | Settings | File Templates.
*/

/**
 * Абстрактный класс для реализации adapter'а для отображения в listview или в gridview.
 * Реализации производных классов зависит от ссылки на фото, которую следует предоставить для конктретного вида.
 */
public abstract class ImageAdapter extends BaseAdapter {
    private List<Image> images;
    private ImageDownloader imageDownloader;
    private DiskCache diskCache;

    public ImageAdapter(DiskCache cache) {
        images = new ArrayList<Image>();
        imageDownloader = new ImageDownloader(null);
        this.diskCache = cache;
    }

    @Override
    public int getCount() {
        return images.size();
    }

    @Override
    public Object getItem(int i) {
        return images.get(i);
    }

    @Override
    public long getItemId(int i) {
        return images.get(i).getId().hashCode();
    }

    /**
     * Получить фото из кэша или скачать фото по укзанной ссылке.
     */
    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        if (view == null) {
            view = new ImageView(viewGroup.getContext());
        }

        BitmapCache cache = BitmapCache.getInstance();
        Bitmap bitmap = cache.get(getHref(images.get(i)));
        if (bitmap != null) {
            ((ImageView) view).setImageBitmap(bitmap);
        } else {
            imageDownloader.download(getHref(images.get(i)), (ImageView) view, diskCache);
        }

        return view;
    }

    public abstract String getHref(Image image);

    public ImageDownloader getImageDownloader() {
        return imageDownloader;
    }

    public void setImages(List<Image> images) {
        this.images = images;
    }
}
